#ifndef ___fat32_transaccionD1_escribir_lista_pendientes

#define ___fat32_transaccionD1_escribir_lista_pendientes 1

#include "f32_mto.c"

#include "f32_st01.c"
#include "f32_st02.c"
#include "f32_st11.c"

struct fat32trD1_datos {
  fat32_lista_bloques_para_escribir * lbpe;
  unsigned int conexion;
  void * datosInternos;
};

int fat32ctr_escribir_lista_pendientes(FAT32_PARAMS_CREACION_TRANSACCION);
int fat32etr_escribir_lista_pendientes(FAT32_PARAMS_TRANSACCION);

int fat32ctr_escribir_lista_pendientes (FAT32_PARAMS_CREACION_TRANSACCION) {
  fat32_lista_bloques_para_escribir ** lbpe = datosIniciales;
  struct fat32trD1_datos * nuevosDatos = malloc(sizeof(struct fat32trD1_datos));
  nuevosDatos -> lbpe = *lbpe;
  *datos = nuevosDatos;
  *handler = &fat32etr_escribir_lista_pendientes;
  return 0x0100;
}

int fat32etr_escribir_lista_pendientes (FAT32_PARAMS_TRANSACCION) {
  unsigned char estado1;
  int estado2;
  estado2 = estado >> 8;
  estado1 = estado & 255;
  struct fat32trD1_datos_internos * datosT = *datos;
  switch (estado2) {
  case 0x01:
    estado1 = fat32st_obtener_conexion(estado1, numeroTransaccion, &(datosT -> conexion), resultadoOperacion, datosOperacion);
    if (!estado1) estado2 = 0x02;
    break;
  case 0x02:
    estado1 = fat32st_ejecutar_lista_bloques_para_escribir(estado1, numeroTransaccion, datosT -> lbpe, &(datosT -> datosInternos),
                                                                                               resultadoOperacion, datosOperacion);
    if (!estado1) estado2 = 0x03;
    break;
  case 0x03:
    estado1 = fat32st_liberar_conexion(estado1, transaccion);
    if (!estado1) estado2 = 0xE1;
    break;
  case 0xE1:
    free(datosT -> lbpe);
    free(datosT);
    estado2 = 0;
    estado1 = 0;
  }
  return (estado2 << 8) | estado1;
}

#endif